package modelo;

import interfaz.IEntidad;

import java.util.List;

import javax.swing.table.AbstractTableModel;

import manejador.ManejadorDeCurso;
import manejador.ManejadorDeEmpleado;
import entidad.Curso;
import entidad.Empleado;

public class ModeloCurso extends AbstractTableModel {

	private static final long serialVersionUID = 1L;
	private String[] encabezados = null;
	private List<IEntidad> cursos = null;
	private static ModeloCurso instancia = null;
	private Curso curso = null;
	private ManejadorDeCurso manejadorDeCurso = null;
	private String parametro = "ACTIVO";

	private ModeloCurso() {
		encabezados = new String[] { "ID Curso", "Nombre", "Profesor",
				"Estatus" };
		manejadorDeCurso = ManejadorDeCurso.getInstancia();
		cursos = manejadorDeCurso.getEntidadDinamica(this.getParametro());

	}

	public static ModeloCurso getInstancia() {
		if (instancia == null) {
			instancia = new ModeloCurso();
		}
		return instancia;
	}

	public String getColumnName(int indice) {
		return encabezados[indice];
	}

	@Override
	public int getColumnCount() {

		return encabezados.length;
	}

	@Override
	public int getRowCount() {
		return cursos.size();
	}

	@Override
	public Object getValueAt(int fila, int columna) {
		String retorno = "";
		curso = (Curso) cursos.get(fila);
		Empleado profesor = (Empleado) ManejadorDeEmpleado.getInstancia()
				.getEntidadPorId(curso.getIdEmpleado());
		switch (columna) {
		case 0:
			retorno = String.valueOf(curso.getIdCurso());
			break;
		case 1:
			retorno = curso.getNombre();
			break;
		case 2:
			retorno = String.valueOf(profesor.getNombre() + " "
					+ profesor.getApellido());
			break;

		case 3:
			retorno = String.valueOf(curso.getEstatus());
			break;

		}
		return retorno;
	}

	public void agregar(Curso curso) {
		manejadorDeCurso.agregar(curso);
		cursos = manejadorDeCurso.getEntidadDinamica(this.getParametro());
		fireTableDataChanged();
	}

	public void modificar(Curso curso, int id) {
		manejadorDeCurso.modificar(curso, id);
		cursos = manejadorDeCurso.getEntidadDinamica(this.getParametro());
		fireTableDataChanged();
	}

	public void actualizarTableParametros(String parametro) {
		this.setParametro(parametro);
		cursos = manejadorDeCurso.getEntidadDinamica(this.getParametro());
		fireTableDataChanged();
	}

	public void cambiarEstatus(int id) {
		manejadorDeCurso.cambiarEstatus(id);
		cursos = manejadorDeCurso.getEntidadDinamica(this.getParametro());
		fireTableDataChanged();
	}

	public void eliminar(int fila) {
		cursos = manejadorDeCurso.getEntidad();
		fireTableRowsDeleted(fila, fila);
	}

	public String getParametro() {
		return parametro;
	}

	public void setParametro(String parametro) {
		this.parametro = parametro;
	}
}
